<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" /> 
    <title>Linux内核 TCP/IP、Socket参数调优 - 天地维杰网</title>
    <meta name="keywords" content="系统架构,shutdown,不与天斗,Domino,博客,程序员,架构师,笔记,技术,分享,java,Redis">
    
    <meta property="og:title" content="Linux内核 TCP/IP、Socket参数调优">
    <meta property="og:site_name" content="天地维杰网">
    <meta property="og:image" content="/img/author.jpg"> 
    <meta name="title" content="Linux内核 TCP/IP、Socket参数调优 - 天地维杰网" />
    <meta name="description" content="所有的TCP/IP参数都位于`/proc/sys/net`目录下（请注意，对/proc/sys/net目录下内容的修改都是临时的，任何修改在系统重启后都会丢失），例如下面这些重要的参数：" />
     
    <link rel="shortcut icon" href="http://www.shutdown.cn/img/favicon.ico" />
    <link rel="apple-touch-icon" href="http://www.shutdown.cn/img/apple-touch-icon.png" />
    <link rel="apple-touch-icon-precomposed" href="http://www.shutdown.cn/img/apple-touch-icon.png" />
    <link href="http://www.shutdown.cn/js/vendor/font-awesome/css/font-awesome.min.css?v=4.6.2" rel="stylesheet" type="text/css" />
    <link href="http://www.shutdown.cn/js/vendor/fancybox/jquery.fancybox.css?v=2.1.5" rel="stylesheet" type="text/css" />
    <link href="http://www.shutdown.cn/css/main.css" rel="stylesheet" type="text/css" />
    <link href="http://www.shutdown.cn/css/syntax.css" rel="stylesheet" type="text/css" />
    <script type="text/javascript" id="hexo.configuration">
  var NexT = window.NexT || {};
  var CONFIG = {
    scheme: 'Pisces',
    sidebar: {"position":"left","display":"post"},
     fancybox: true, 
    motion: true
  };
</script>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-7826003325059020" crossorigin="anonymous"></script>
</head>
<body itemscope itemtype="http://schema.org/WebPage" lang="zh-Hans">
<div class="container one-collumn sidebar-position-left page-home  ">
    <div class="headband"></div>

    <header id="header" class="header" itemscope itemtype="http://schema.org/WPHeader">
      <div class="header-inner"> <div class="site-meta  custom-logo ">

  <div class="custom-logo-site-title">
    <a href="http://www.shutdown.cn"  class="brand" rel="start">
      <span class="logo-line-before"><i></i></span>
      <span class="site-title">天地维杰网</span>
      <span class="logo-line-after"><i></i></span>
    </a>
  </div>
  <p class="site-subtitle">人如秋鸿来有信，事若春梦了无痕</p>
</div>

<div class="site-nav-toggle">
  <button>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
    <span class="btn-bar"></span>
  </button>
</div>

<nav class="site-nav">
    <ul id="menu" class="menu">
      
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-home"></i> <br />首页
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/redis/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-battery-full"></i> <br />Redis
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/java/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-coffee"></i> <br />java
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/linux/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-linux"></i> <br />linux
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/daily/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-bug"></i> <br />日常问题
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/spring/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-child"></i> <br />Spring和Springboot
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/mac/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-fire"></i> <br />Mac相关
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/middleware/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-gavel"></i> <br />中间件
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/jiagou/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-rocket"></i> <br />架构
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/python/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-ship"></i> <br />python
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/front/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-bolt"></i> <br />前端
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/jvm/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-balance-scale"></i> <br />jvm
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/c/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-battery-empty"></i> <br />c语言
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/categories/web3/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-web3"></i> <br />web3
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/post/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-archive"></i> <br />归档
          </a>
        </li>
      
        <li class="menu-item ">
          <a href="http://www.shutdown.cn/about/" rel="section">
              <i class="menu-item-icon fa fa-fw fa-user"></i> <br />关于
          </a>
        </li>
      
      <li class="menu-item menu-item-search">
        <a href="javascript:;" class="popup-trigger"> <i class="menu-item-icon fa fa-search fa-fw"></i> <br /> 搜索</a>
      </li>
    </ul>
    <div class="site-search">
      <div class="popup">
 <span class="search-icon fa fa-search"></span>
 <input type="text" id="local-search-input">
 <div id="local-search-result"></div>
 <span class="popup-btn-close">close</span>
</div>

    </div>
</nav>

 </div>
    </header>

    <main id="main" class="main">
      <div class="main-inner">
        <div class="content-wrap">
          <div id="content" class="content">
            
<section id="posts" class="posts-expand">
  <article class="post post-type-normal " itemscope itemtype="http://schema.org/Article">
    <header class="post-header">
      <h1 class="post-title" itemprop="name headline">
        <a class="post-title-link" href="http://www.shutdown.cn/post/linux-kernel-tcp-ip-socket-parameter-tuning/" itemprop="url">
        Linux内核 TCP/IP、Socket参数调优
        </a>
      </h1>
      <div class="post-meta">
      <span class="post-time">
<span class="post-meta-item-icon">
    <i class="fa fa-calendar-o"></i>
</span>
<span class="post-meta-item-text">时间：</span>
<time itemprop="dateCreated" datetime="2016-03-22T13:04:35+08:00" content="2022-09-27">
    2022-09-27
</time>
</span> 
      

  <span class="post-category" >
  &nbsp; | &nbsp;
  <span class="post-meta-item-icon">
    <i class="fa fa-folder-o"></i>
  </span>
  <span class="post-meta-item-text">分类：</span>
  
    <span itemprop="about" itemscope itemtype="https://schema.org/Thing">
      <a href="http://www.shutdown.cn/categories/linux" itemprop="url" rel="index">
        <span itemprop="name">linux</span>
      </a>
      &nbsp; 
    </span>
  
</span>


      
 <span>
&nbsp; | &nbsp;
<span class="post-meta-item-icon">
    <i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text">转载</span>
</span>

       <span>
&nbsp; | &nbsp;
<span class="post-meta-item-icon">
    <i class="fa fa-eye"></i>
</span>
<span class="post-meta-item-text">阅读：</span>
<span class="leancloud-visitors-count">4977 字 ~10分钟</span>
</span>
      </div>
    </header>
    <div class="post-body" itemprop="articleBody">
    
    <div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-fallback" data-lang="fallback"> 文章系转载，便于整理和分类，原文地址：http://www.360doc.com/content/14/0606/16/3300331_384326124.shtml</code></pre></div>
    

    

<h2 id="doc1">Doc1:</h2>

<p><strong>/proc/sys/net目录</strong></p>

<p>　　所有的TCP/IP参数都位于<code>/proc/sys/net</code>目录下（请注意，对/proc/sys/net目录下内容的修改都是临时的，任何修改在系统重启后都会丢失），例如下面这些重要的参数：</p>

<table>
<thead>
<tr>
<th><strong>参数（路径+文件）</strong></th>
<th><strong>描述</strong></th>
<th><strong>默认值</strong></th>
<th><strong>优化值</strong></th>
</tr>
</thead>

<tbody>
<tr>
<td>/proc/sys/net/core/rmem_default</td>
<td>默认的TCP数据接收窗口大小（字节）。</td>
<td>229376</td>
<td>256960</td>
</tr>

<tr>
<td>/proc/sys/net/core/rmem_max</td>
<td>最大的TCP数据接收窗口（字节）。</td>
<td>131071</td>
<td>513920</td>
</tr>

<tr>
<td>/proc/sys/net/core/wmem_default</td>
<td>默认的TCP数据发送窗口大小（字节）。</td>
<td>229376</td>
<td>256960</td>
</tr>

<tr>
<td>/proc/sys/net/core/wmem_max</td>
<td>最大的TCP数据发送窗口（字节）。</td>
<td>131071</td>
<td>513920</td>
</tr>

<tr>
<td>/proc/sys/net/core/netdev_max_backlog</td>
<td>在每个网络接口接收数据包的速率比内核处理这些包的速率快时，允许送到队列的数据包的最大数目。</td>
<td>1000</td>
<td>2000</td>
</tr>

<tr>
<td>/proc/sys/net/core/somaxconn</td>
<td>定义了系统中每一个端口最大的监听队列的长度，这是个全局的参数。</td>
<td>128</td>
<td>2048</td>
</tr>

<tr>
<td>/proc/sys/net/core/optmem_max</td>
<td>表示每个套接字所允许的最大缓冲区的大小。</td>
<td>20480</td>
<td>81920</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_mem</td>
<td>确定TCP栈应该如何反映内存使用，每个值的单位都是内存页（通常是4KB）。第一个值是内存使用的下限；第二个值是内存压力模式开始对缓冲区使用应用压力的上限；第三个值是内存使用的上限。在这个层次上可以将报文丢弃，从而减少对内存的使用。对于较大的BDP可以增大这些值（注意，其单位是内存页而不是字节）。</td>
<td>94011 125351 188022</td>
<td>131072 262144 524288</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_rmem</td>
<td>为自动调优定义socket使用的内存。第一个值是为socket接收缓冲区分配的最少字节数；第二个值是默认值（该值会被rmem_default覆盖），缓冲区在系统负载不重的情况下可以增长到这个值；第三个值是接收缓冲区空间的最大字节数（该值会被rmem_max覆盖）。</td>
<td>4096 87380 4011232</td>
<td>8760 256960 4088000</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_wmem</td>
<td>为自动调优定义socket使用的内存。第一个值是为socket发送缓冲区分配的最少字节数；第二个值是默认值（该值会被wmem_default覆盖），缓冲区在系统负载不重的情况下可以增长到这个值；第三个值是发送缓冲区空间的最大字节数（该值会被wmem_max覆盖）。</td>
<td>4096 16384 4011232</td>
<td>8760 256960 4088000</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_keepalive_time</td>
<td>TCP发送keepalive探测消息的间隔时间（秒），用于确认TCP连接是否有效。</td>
<td>7200</td>
<td>1800</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_keepalive_intvl</td>
<td>探测消息未获得响应时，重发该消息的间隔时间（秒）。</td>
<td>75</td>
<td>30</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_keepalive_probes</td>
<td>在认定TCP连接失效之前，最多发送多少个keepalive探测消息。</td>
<td>9</td>
<td>3</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_sack</td>
<td>启用有选择的应答（1表示启用），通过有选择地应答乱序接收到的报文来提高性能，让发送者只发送丢失的报文段，（对于广域网通信来说）这个选项应该启用，但是会增加对CPU的占用。</td>
<td>1</td>
<td>1</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_fack</td>
<td>启用转发应答，可以进行有选择应答（SACK）从而减少拥塞情况的发生，这个选项也应该启用。</td>
<td>1</td>
<td>1</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_timestamps</td>
<td>TCP时间戳（会在TCP包头增加12个字节），以一种比重发超时更精确的方法（参考RFC 1323）来启用对RTT 的计算，为实现更好的性能应该启用这个选项。</td>
<td>1</td>
<td>1</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_window_scaling</td>
<td>启用RFC 1323定义的window scaling，要支持超过64KB的TCP窗口，必须启用该值（1表示启用），TCP窗口最大至1GB，TCP连接双方都启用时才生效。</td>
<td>1</td>
<td>1</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_syncookies</td>
<td>表示是否打开TCP同步标签（syncookie），内核必须打开了CONFIG_SYN_COOKIES项进行编译，同步标签可以防止一个套接字在有过多试图连接到达时引起过载。</td>
<td>1</td>
<td>1</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_tw_reuse</td>
<td>表示是否允许将处于TIME-WAIT状态的socket（TIME-WAIT的端口）用于新的TCP连接 。</td>
<td>0</td>
<td>1</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_tw_recycle</td>
<td>能够更快地回收TIME-WAIT套接字。</td>
<td>0</td>
<td>1</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_fin_timeout</td>
<td>对于本端断开的socket连接，TCP保持在FIN-WAIT-2状态的时间（秒）。对方可能会断开连接或一直不结束连接或不可预料的进程死亡。</td>
<td>60</td>
<td>30</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/ip_local_port_range</td>
<td>表示TCP/UDP协议允许使用的本地端口号</td>
<td>32768 61000</td>
<td>1024 65000</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_max_syn_backlog</td>
<td>对于还未获得对方确认的连接请求，可保存在队列中的最大数目。如果服务器经常出现过载，可以尝试增加这个数字。</td>
<td>2048</td>
<td>2048</td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_low_latency</td>
<td>允许TCP/IP栈适应在高吞吐量情况下低延时的情况，这个选项应该禁用。</td>
<td>0</td>
<td></td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_westwood</td>
<td>启用发送者端的拥塞控制算法，它可以维护对吞吐量的评估，并试图对带宽的整体利用情况进行优化，对于WAN 通信来说应该启用这个选项。</td>
<td>0</td>
<td></td>
</tr>

<tr>
<td>/proc/sys/net/ipv4/tcp_bic</td>
<td>为快速长距离网络启用Binary Increase Congestion，这样可以更好地利用以GB速度进行操作的链接，对于WAN通信应该启用这个选项。</td>
<td>1</td>
<td></td>
</tr>
</tbody>
</table>

<p><strong>/etc/sysctl.conf文件</strong></p>

<p><code>/etc/sysctl.conf</code>是一个允许你改变正在运行中的Linux系统的接口。它包含一些TCP/IP堆栈和虚拟内存系统的高级选项，可用来控制Linux网络配置，由于<code>/proc/sys/net</code>目录内容的临时性，建议把TCPIP参数的修改添加到<code>/etc/sysctl.con</code>f文件, 然后保存文件，使用命令<code>/sbin/sysctl –p</code>使之立即生效。具体修改方案参照上文：</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-fallback" data-lang="fallback">net.core.rmem_default = 256960
net.core.rmem_max = 513920
net.core.wmem_default = 256960
net.core.wmem_max = 513920
net.core.netdev_max_backlog = 2000
net.core.somaxconn = 2048
net.core.optmem_max = 81920
net.ipv4.tcp_mem = 131072 262144 524288
net.ipv4.tcp_rmem = 8760 256960 4088000
net.ipv4.tcp_wmem = 8760 256960 4088000
net.ipv4.tcp_keepalive_time = 1800
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_sack = 1
net.ipv4.tcp_fack = 1
net.ipv4.tcp_timestamps = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_syn_backlog = 2048</code></pre></div>
<h2 id="doc2">Doc2：</h2>

<p>可调优的内核变量存在两种主要接口：<code>sysctl</code>命令和<code>/proc</code>文件系统，proc中与进程无关的所有信息都被移植到sysfs中。IPV4协议栈的<code>sysctl</code>参数主要是<code>sysctl.net.core</code>、<code>sysctl.net.ipv4</code>，对应的<code>/proc</code>文件系统是<code>/proc/sys/net/ipv4</code>和<code>/proc/sys/net/core</code>。只有内核在编译时包含了特定的属性，该参数才会出现在内核中。</p>

<p>对于内核参数应该谨慎调节，这些参数通常会影响到系统的整体性能。内核在启动时会根据系统的资源情况来初始化特定的变量，这种初始化的调节一般会满足通常的性能需求。</p>

<p>应用程序通过socket系统调用和远程主机进行通讯，每一个socket都有一个读写缓冲区。读缓冲区保存了远程主机发送过来的数据，如果缓冲区已满，则数据会被丢弃，写缓冲期保存了要发送到远程主机的数据，如果写缓冲区已慢，则系统的应用程序在写入数据时会阻塞。可知，缓冲区是有大小的。</p>

<p><strong>socket缓冲区默认大小</strong>：</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/core/rmem_default   对应net.core.rmem_default
/proc/sys/net/core/wmem_default   对应net.core.wmem_default</code></pre></div>
<p>上面是各种类型socket的默认读写缓冲区大小，然而对于特定类型的socket则可以设置独立的值覆盖默认值大小。例如tcp类型的socket就可以用/proc/sys/net/ipv4/tcp_rmem和tcp_wmem来覆盖。</p>

<p><strong>socket缓冲区最大值：</strong></p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/core/rmem_max     对应net.core.rmem_max
/proc/sys/net/core/wmem_max     对应net.core.wmem_max

/proc/sys/net/core/netdev_max_backlog   对应 net.core.netdev_max_backlog
该参数定义了当接口收到包的速率大于内核处理包的速率时，设备的输入队列中的最大报文数。

/proc/sys/net/core/somaxconn     对应 net.core.somaxconn
通过listen系统调用可以指定的最大accept队列backlog，当排队的请求连接大于该值时，后续进来的请求连接会被丢弃。

/proc/sys/net/core/optmem_max      对应 net.core.optmem_max
每个socket的副缓冲区大小。</code></pre></div>
<p><strong>TCP/IPV4内核参数：</strong>
在创建socket的时候会指定socke协议和地址类型。TCP socket缓冲区大小是他自己控制而不是由core内核缓冲区控制。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_rmem   对应net.ipv4.tcp_rmem
/proc/sys/net/ipv4/tcp_wmem   对应net.ipv4.tcp_wmem</code></pre></div>
<p>以上是TCP socket的读写缓冲区的设置，每一项里面都有三个值，第一个值是缓冲区最小值，中间值是缓冲区的默认值，最后一个是缓冲区的最大值，虽然缓冲区的值不受core缓冲区的值的限制，但是缓冲区的最大值仍旧受限于core的最大值。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_mem </code></pre></div>
<p>该内核参数也是包括三个值，用来定义内存管理的范围，第一个值的意思是当page数低于该值时，TCP并不认为他为内存压力，第二个值是进入内存的压力区域时所达到的页数，第三个值是所有TCP sockets所允许使用的最大page数，超过该值后，会丢弃后续报文。page是以页面为单位的，为系统中socket全局分配的内存容量。</p>

<p>socket的结构如下图：</p>

<div  align="center"><img src="https://wejack639.oss-cn-beijing.aliyuncs.com/blogimages/img/20220927182659.png" width = 400 /> </div>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_window_scaling    对应net.ipv4.tcp_window_scaling</code></pre></div>
<p>管理TCP的窗口缩放特性，因为在tcp头部中声明接收缓冲区的长度为26位，因此窗口不能大于64K，如果大于64K，就要打开窗口缩放。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_sack   对应net.ipv4.tcp_sack</code></pre></div>
<p>管理TCP的选择性应答，允许接收端向发送端传递关于字节流中丢失的序列号，减少了段丢失时需要重传的段数目，当段丢失频繁时，sack是很有益的。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_dsack  对应net.ipv4.tcp_dsack</code></pre></div>
<p>是对sack的改进，能够检测不必要的重传。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_fack   对应net.ipv4.tcp_fack</code></pre></div>
<p>对sack协议加以完善，改进tcp的拥塞控制机制。</p>

<p><strong>TCP的连接管理：</strong></p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_max_syn_backlog   对应net.ipv4.tcp_max_syn_backlog</code></pre></div>
<p>每一个连接请求(SYN报文)都需要排队，直至本地服务器接收，该变量就是控制每个端口的 TCP SYN队列长度的。如果连接请求多余该值，则请求会被丢弃。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_syn_retries   对应net.ipv4.tcp_syn_retries</code></pre></div>
<p>控制内核向某个输入的SYN/ACK段重新发送相应的次数，低值可以更好的检测到远程主机的连接失败。可以修改为3</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_retries1   对应net.ipv4.tcp_retries1</code></pre></div>
<p>该变量设置放弃回应一个tcp连接请求前，需要进行多少次重试。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_retries2   对应net.ipv4.tcp_retries2</code></pre></div>
<p>控制内核向已经建立连接的远程主机重新发送数据的次数，低值可以更早的检测到与远程主机失效的连接，因此服务器可以更快的释放该连接，可以修改为5</p>

<p><strong>TCP连接的保持：</strong></p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_keepalive_time     对应net.ipv4.tcp_keepalive_time</code></pre></div>
<p>如果在该参数指定的秒数内连接始终处于空闲状态，则内核向客户端发起对该主机的探测</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_keepalive_intvl   对应net.ipv4.tcp_keepalive_intvl</code></pre></div>
<p>该参数以秒为单位，规定内核向远程主机发送探测指针的时间间隔</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_keepalive_probes  对应net.ipv4.tcp_keepalive_probes</code></pre></div>
<p>该参数规定内核为了检测远程主机的存活而发送的探测指针的数量，如果探测指针的数量已经使用完毕仍旧没有得到客户端的响应，即断定客户端不可达，关闭与该客户端的连接，释放相关资源。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/ip_local_port_range  对应net.ipv4.ip_local_port_range</code></pre></div>
<p>规定了tcp/udp可用的本地端口的范围。</p>

<p><strong>TCP连接的回收：</strong></p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_max_tw_buckets   对应net.ipv4.tcp_max_tw_buckets</code></pre></div>
<p>该参数设置系统的TIME_WAIT的数量，如果超过默认值则会被立即清除。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_tw_reuse      对应net.ipv4.tcp_tw_reuse</code></pre></div>
<p>该参数设置TIME_WAIT重用，可以让处于TIME_WAIT的连接用于新的tcp连接</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_tw_recycle     对应net.ipv4.tcp_tw_recycle</code></pre></div>
<p>该参数设置tcp连接中TIME_WAIT的快速回收。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/tcp_fin_timeout    对应net.ipv4.tcp_fin_timeout</code></pre></div>
<p>设置TIME_WAIT2进入CLOSED的等待时间。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/route/max_size</code></pre></div>
<p>内核所允许的最大路由数目。</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/ip_forward</code></pre></div>
<p>接口间转发报文</p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/net/ipv4/ip_default_ttl</code></pre></div>
<p>报文可以经过的最大跳数</p>

<p><strong>虚拟内存参数：</strong></p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-text" data-lang="text">/proc/sys/vm/</code></pre></div>
<p>在<code>linux kernel 2.6.25</code>之前通过<code>ulimit -n (setrlimit(RLIMIT_NOFILE))</code>设置每个进程的最大打开文件句柄数不能超过<code>NR_OPEN(1024*1024)</code>,也就是100多w(除非重新编译内核)，而在25之后，内核导出了一个sys接口可以修改这个最大值<code>/proc/sys/fs/nr_open</code>。shell里不能直接更改，是因为登录的时候pam已经从<code>limits.conf</code>中设置了上限，<code>ulimit</code>命令只能在低于上限的范围内发挥了。</p>

<p><strong>Linux中查看socket状态：</strong></p>
<div class="highlight"><pre style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4"><code class="language-shell" data-lang="shell">cat /proc/net/sockstat <span style="color:#8f5902;font-style:italic">#（这个是ipv4的）</span>

sockets: used <span style="color:#0000cf;font-weight:bold">137</span>
TCP: inuse <span style="color:#0000cf;font-weight:bold">49</span> orphan <span style="color:#0000cf;font-weight:bold">0</span> tw <span style="color:#0000cf;font-weight:bold">3272</span> alloc <span style="color:#0000cf;font-weight:bold">52</span> mem <span style="color:#0000cf;font-weight:bold">46</span>
UDP: inuse <span style="color:#0000cf;font-weight:bold">1</span> mem <span style="color:#0000cf;font-weight:bold">0</span>
RAW: inuse <span style="color:#0000cf;font-weight:bold">0</span>
FRAG: inuse <span style="color:#0000cf;font-weight:bold">0</span> memory <span style="color:#0000cf;font-weight:bold">0</span>
说明：
sockets: used：已使用的所有协议套接字总量
TCP: inuse：正在使用（正在侦听）的TCP套接字数量。其值≤ netstat –lnt <span style="color:#000;font-weight:bold">|</span> grep ^tcp <span style="color:#000;font-weight:bold">|</span> wc –l
TCP: orphan：无主（不属于任何进程）的TCP连接数（无用、待销毁的TCP socket数）
TCP: tw：等待关闭的TCP连接数。其值等于netstat –ant <span style="color:#000;font-weight:bold">|</span> grep TIME_WAIT <span style="color:#000;font-weight:bold">|</span> wc –l
TCP：alloc<span style="color:#ce5c00;font-weight:bold">(</span>allocated<span style="color:#ce5c00;font-weight:bold">)</span>：已分配（已建立、已申请到sk_buff）的TCP套接字数量。其值等于netstat –ant <span style="color:#000;font-weight:bold">|</span> grep ^tcp <span style="color:#000;font-weight:bold">|</span> wc –l
TCP：mem：套接字缓冲区使用量（单位不详。用scp实测，速度在4803.9kB/s时：其值<span style="color:#ce5c00;font-weight:bold">=</span>11，netstat –ant 中相应的22端口的Recv-Q＝0，Send-Q≈400）
UDP：inuse：正在使用的UDP套接字数量
RAW：
FRAG：使用的IP段数量</code></pre></div>
<p>参考：/kernel/Documentation/sysctl/</p>

    </div>
    <footer class="post-footer">
     
 
<div class="post-tags">     
     
    <a href="http://www.shutdown.cn/tags/linux" rel="tag" title="linux">#linux#</a>
    
    <a href="http://www.shutdown.cn/tags/tcp" rel="tag" title="TCP">#TCP#</a>
    
    <a href="http://www.shutdown.cn/tags/ip" rel="tag" title="IP">#IP#</a>
    
    <a href="http://www.shutdown.cn/tags/socket" rel="tag" title="Socket">#Socket#</a>
    
    <a href="http://www.shutdown.cn/tags/%e5%86%85%e6%a0%b8" rel="tag" title="内核">#内核#</a>
    
    <a href="http://www.shutdown.cn/tags/%e8%b0%83%e4%bc%98" rel="tag" title="调优">#调优#</a>
    
</div>



     <div class="post-nav">
    <div class="post-nav-next post-nav-item">
    
        <a href="http://www.shutdown.cn/post/linux-socket-tcp-server-by-c/" rel="next" title="linux下 socket tcp Server c语言编写（分别实现单进程，多进程，多线程）">
        <i class="fa fa-chevron-left"></i> linux下 socket tcp Server c语言编写（分别实现单进程，多进程，多线程）
        </a>
    
    </div>

    <div class="post-nav-prev post-nav-item">
    
        <a href="http://www.shutdown.cn/post/again-talk-about-redis-beng-and-tou-and-chuan/" rel="prev" title="再谈缓存雪崩、穿透、击穿">
        再谈缓存雪崩、穿透、击穿 <i class="fa fa-chevron-right"></i>
        </a>
    
    </div>
</div>
      
     
     
     






    </footer>
  </article>
</section>

          </div>
        </div>
        <div class="sidebar-toggle">
  <div class="sidebar-toggle-line-wrap">
    <span class="sidebar-toggle-line sidebar-toggle-line-first"></span>
    <span class="sidebar-toggle-line sidebar-toggle-line-middle"></span>
    <span class="sidebar-toggle-line sidebar-toggle-line-last"></span>
  </div>
</div>
<aside id="sidebar" class="sidebar">
  <div class="sidebar-inner">

  <ul class="sidebar-nav motion-element">
    <li class="sidebar-nav-toc sidebar-nav-active" data-target="post-toc-wrap" >
      文章目录
    </li>
    <li class="sidebar-nav-overview" data-target="site-overview">
      站点概览
    </li>
  </ul>

    <section class="site-overview sidebar-panel ">
      <div class="site-author motion-element" itemprop="author" itemscope itemtype="http://schema.org/Person">
    <img class="site-author-image" itemprop="image"
        src="http://www.shutdown.cn/img/author.jpg"
        alt="不与天斗Domino" />
    <p class="site-author-name" itemprop="name">不与天斗Domino</p>
    <p class="site-description motion-element" itemprop="description"> 
        Programmer &amp; Architect</p>
</div>
      <nav class="site-state motion-element">
    <div class="site-state-item site-state-posts">
      <a href="http://www.shutdown.cn/post/">
        <span class="site-state-item-count">183</span>
        <span class="site-state-item-name">日志</span>
      </a>
    </div>
    <div class="site-state-item site-state-categories">    
        <a href="http://www.shutdown.cn/categories/">      
         
        <span class="site-state-item-count">15</span>
        
        <span class="site-state-item-name">分类</span>
        
        </a>
    </div>

    <div class="site-state-item site-state-tags">
        <a href="http://www.shutdown.cn/tags/">
         
        <span class="site-state-item-count">224</span>
        
        <span class="site-state-item-name">标签</span>
        </a>
    </div>
</nav>
      
      

      

      <div class="links-of-blogroll motion-element inline">
<script type="text/javascript" src="//rf.revolvermaps.com/0/0/8.js?i=&amp;m=0&amp;s=220&amp;c=ff0000&amp;cr1=ffffff&amp;f=arial&amp;l=33&amp;bv=35" async="async"></script>
</div>

    </section>
    
<section class="post-toc-wrap motion-element sidebar-panel sidebar-panel-active">
    <div class="post-toc">
        <div class="post-toc-content"><nav id="TableOfContents">
<ul>
<li>
<ul>
<li><a href="#doc1">Doc1:</a></li>
<li><a href="#doc2">Doc2：</a></li>
</ul></li>
</ul>
</nav></div>
    </div>
</section>

  </div>
</aside>

      </div>
    </main>
   
    <footer id="footer" class="footer">
      <div class="footer-inner">
        <div class="copyright" >
  <span itemprop="copyrightYear">  &copy; 
  2013 - 2023</span>
  <span class="with-love"><i class="fa fa-heart"></i></span>
  <span class="author" itemprop="copyrightHolder">天地维杰网</span>
  <span class="icp" itemprop="copyrightHolder"><a href="https://beian.miit.gov.cn/" target="_blank">京ICP备13019191号-1</a></span>
</div>
<div class="powered-by">
  Powered by - <a class="theme-link" href="http://gohugo.io" target="_blank" title="hugo" >Hugo v0.63.2</a>
</div>
<div class="theme-info">
  Theme by - <a class="theme-link" href="https://github.com/xtfly/hugo-theme-next" target="_blank"> NexT
  </a>
</div>


      </div>
    </footer>

    <div class="back-to-top">
      <i class="fa fa-arrow-up"></i>
      <span id="scrollpercent"><span>0</span>%</span>
    </div>
  </div>

  

<script type="text/javascript">
  if (Object.prototype.toString.call(window.Promise) !== '[object Function]') {
    window.Promise = null;
  }
</script>
<script type="text/javascript" src="http://www.shutdown.cn/js/vendor/jquery/index.js?v=2.1.3"></script>
<script type="text/javascript" src="http://www.shutdown.cn/js/vendor/fastclick/lib/fastclick.min.js?v=1.0.6"></script> 
<script type="text/javascript" src="http://www.shutdown.cn/js/vendor/jquery_lazyload/jquery.lazyload.js?v=1.9.7"></script>
<script type="text/javascript" src="http://www.shutdown.cn/js/vendor/velocity/velocity.min.js?v=1.2.1"></script>
<script type="text/javascript" src="http://www.shutdown.cn/js/vendor/velocity/velocity.ui.min.js?v=1.2.1"></script>
<script src="http://www.shutdown.cn/js/vendor/ua-parser-js/dist/ua-parser.min.js?v=0.7.9"></script>

<script src="http://www.shutdown.cn/js/vendor/fancybox/jquery.fancybox.pack.js?v=2.1.5"></script>

<script type="text/javascript" src="http://www.shutdown.cn/js/utils.js"></script>
<script type="text/javascript" src="http://www.shutdown.cn/js/motion.js"></script>
<script type="text/javascript" src="http://www.shutdown.cn/js/affix.js"></script>
<script type="text/javascript" src="http://www.shutdown.cn/js/schemes/pisces.js"></script>

<script type="text/javascript" src="http://www.shutdown.cn/js/scrollspy.js"></script>
<script type="text/javascript" src="http://www.shutdown.cn/js/post-details.js"></script>
<script type="text/javascript" src="http://www.shutdown.cn/js/toc.js"></script>

<script type="text/javascript" src="http://www.shutdown.cn/js/bootstrap.js"></script>

<script type="text/javascript" src="http://www.shutdown.cn/js/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX", "output/HTML-CSS"],
    tex2jax: {
      inlineMath: [ ['$','$'] ],
      displayMath: [ ['$$','$$'] ],
      processEscapes: true
    },
    "HTML-CSS": { fonts: ["TeX"] }
  });
</script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS-MML_HTMLorMML' async></script>
</body>
</html>